package com.nifostasky.filter;


import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;

import javax.servlet.http.HttpServletRequest;

public class CustomZuulFilter extends ZuulFilter {
    /**
     * 过滤器类型:
     * - **`pre`**：在请求路由到目标之前执行。一般用于请求认证、负载均衡和日志记录。
     *
     * - **`route`**：处理目标请求。这里使用`Apache HttpClient`或`Netflix Ribbon`构造对目标的HTTP请求。
     *
     * - **`post`**：在目标请求返回后执行。一般会在此步骤添加响应头、收集统计和性能数据等。
     *
     * - **`error`**：整个流程某块出错时执行。
     * @return
     */
    @Override
    public String filterType() {
        return "pre";
    }

    /**
     * 过滤器优先级;
     * 过滤器执行顺序
     * @return
     */
    @Override
    public int filterOrder() {
        return 0;
    }

    /**
     * 是否启用该过滤器; true:启用 ; false:禁用
     * @return
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    /**
     * 具体执行逻辑
     * @return
     * @throws ZuulException
     */
    @Override
    public Object run() throws ZuulException {
        //获取请求内容
        RequestContext currentContext = RequestContext.getCurrentContext();
        HttpServletRequest request = currentContext.getRequest();
        //打印输出
        System.out.println(String.format("send %s request to %s",request.getMethod(),request.getRequestURL()));
        //过滤请求
        //currentContext.setSendZuulResponse(false);

        //这返回值没啥用,补充语法
        return null;
    }
}
